//
// Created by Kqj on 25-8-31.
//

#include "max6675.h"
#include <stdbool.h>
//#include "stm32f1xx_hal.h"
#include "gpio.h"
//#include "stdio.h"
/**
  * @brief  max6675模块读写一个字节的数据
  * @param  txData：要发送的数据
  * @retval 接收到的数据
  */
uint8_t max6675_readWriteByte(uint8_t txData)
{
    uint8_t  rxData = 0;
    HAL_SPI_Receive(&hspi1,&rxData,sizeof(txData),999);
    return rxData;
}

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度的原始数据
  */

//
//
//unsigned int MAX6675_ReadReg(void)
//{
//    unsigned char i;
//    uint16_t  dat;
//
//    i   = 0;
//    dat = 0;
//    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,0);		//拉低片选开始传输
//    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,0);	//拉低时钟准备传输
//    HAL_Delay(1);
//    for(i=0; i<16; i++)
//    {
//        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,1);	//拉高时钟线
//        HAL_Delay(1);
//        dat = dat<<1;
//        if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11)==1)
//            dat = dat|0x01;
//        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,0);//拉低时钟结束传输
//        HAL_Delay(1);
//    }
//    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,1);	  //拉高片选，传输结束
//    HAL_Delay(1);
//    return dat;
//}

uint16_t max6675_readRawValue(void)
{
    uint16_t tmp;

    HAL_GPIO_WritePin (MAX6675_CS1_GPIO_Port,MAX6675_CS1_Pin,0); //enable max6675


    tmp = max6675_readWriteByte(0XFF); //read MSB
    tmp <<= 8;
    tmp |= max6675_readWriteByte(0XFF); //read LSB
//    tmp = MAX6675_ReadReg();
    HAL_GPIO_WritePin(MAX6675_CS1_GPIO_Port,MAX6675_CS1_Pin,1); //disable max6675
    if (tmp & 4)
    {
        // thermocouple open
        tmp = 4095; //未检测到热电偶
    }
    else
    {
        tmp = tmp >> 3;
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9); //disable max6675

    }

    return tmp;
}

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度值（单位：℃）
  */
float max6675_readTemperature(void) {
    return (max6675_readRawValue() * 1024.0 / 4096);

}